
import {getUserTempId} from '@/utils/userabout.js'
import { reqGetCode,reqGetUserInfo,reqUserAddressList,reqUserLogin,reqUserLogout,reqUserRegister } from '../api/index.js'

const user = {
    namespaced: true, // 开启命名空间
    state:{
        // getUserTempId() 这个函数是专门用来生成用户的临时标识的
        userTempId: getUserTempId(),
        code: '' ,  // 用户注册验证码信息
        //  暂时不考虑自动登录  将token初始化为空串
        // token: '',    为了实现自动登录  应该讲token进行存储
        token: localStorage.getItem('TOKEN_KEY'),
        // 用户信息 默认为空
        userInfo: {},
        // 用户收货地址信息
        userAddressList: [],
    },
    mutations:{
        // 验证码存储到 state
        RECEIVE_CODE(state,code){
            state.code = code
        },
        // token存储到 state
        RECEIVE_TOKEN(state,token){
            state.token = token
        },
        // 获取用户信息
        RECEIVE_USERINFO(state,userInfo){
            state.userInfo = userInfo
        },
        // 清除用户token
        RESET_TOKEN(state){
            state.token = ''
        },
        // 清除用户信息
        RESET_USERINFO(state){
            state.token = ''
            state.userInfo = {}
        },
        // 用户收货地址
        RECEIVE_USERADDRESSLIST(state,userAddressList){
            state.userAddressList = userAddressList
        }
    },
    actions:{
        // 请求获取验证码code
        async getCode({commit},phone){
            const result = await reqGetCode(phone)
            
            if(result.code === 200){
                commit('RECEIVE_CODE',result.data)
                return 'ok'
            }else{
                return Promise.reject(new Error('getCode failed'))
            }
        },

        // 注册
        async userRegister({commit},userInfo){
            const result = await reqUserRegister(userInfo)
            if(result.code === 200){
                return 'ok'
            }else{
                return Promise.reject(new Error('userRegister failed'))
            }
        },

        // 登录
        async userLogin({commit},userInfo){
            const result = await reqUserLogin(userInfo)
            if(result.code === 200){
                commit('RECEIVE_TOKEN',result.data.token)   // 将token存储到 state
                localStorage.setItem('TOKEN_KEY',result.data.token)   // 将token存储到localstorage实现自动登录
                return 'ok'
                
            }else{
                return Promise.reject(new Error('userLogin failed'))
            }
        },
        // 获取用户信息
        async getUserInfo({commit}){
            const result = await reqGetUserInfo()
            if(result.code === 200){
                commit('RECEIVE_USERINFO',result.data)   // 记得传参 也就是将userInfo信息存储到 vuex
                return 'ok'
            }else{
                return Promise.reject(new Error('getUserInfo failed'))
            }
        },
        // 清除用户信息
        async clearToken({commit}){
            commit('RESET_TOKEN')   // 这里其实可以复用 RESET_USERINFO  这里不改了
            localStorage.removeItem('TOKEN_KEY')  // token过期时 也需要将存储在localstorage中的token清除掉
        },
        // 退出用户登录 
        async userLogout({commit}){
            const result = await reqUserLogout()
            if(result.code === 200){
                // 退出成功需要先清除 userinfo和token  （token包括清除存在vuex和localstorage中的）
                commit('RESET_USERINFO')
                localStorage.removeItem('TOKEN_KEY')
                return 'ok'
            }else{
                return Promise.reject(new Error('userLogout failed'))
            }
        },
        // 获取用户收货地址信息
        async getUserAddressList({commit}){
            const result = await reqUserAddressList()
            if(result.code === 200){
                commit('RECEIVE_USERADDRESSLIST',result.data)
                return 'ok'
            }else{
                return Promise.reject(new Error('getUserAddressList failed'))
            }
        }
    },
    getters:{

    },
}

export default user